package com.bfly.mall.wechat.mp.dto;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bfly.common.json.JaxbUtil;
import com.bfly.mall.wechat.entity.WeChatMpMaterial;

import java.io.Serializable;
import java.util.List;

/**
 * 微信公众号消息回复用户实体类
 *
 * @author 长沙商脉科技有限公司
 * @date 2021/1/7 23:22
 */
public class WeChatMpMsgResponse implements Serializable {

    private static final long serialVersionUID = 5145358332926633314L;

    /**
     * 接收方帐号（收到的OpenID）
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:23
     */
    private String toUserName;

    /**
     * 开发者微信号
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:23
     */
    private String fromUserName;

    /**
     * 消息创建时间 （整型）
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:24
     */
    private long createTime;

    /**
     * 消息类型
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:24
     */
    private String msgType;

    /**
     * 回复文本消息:
     * 回复的消息内容（换行：在content中能够换行，微信客户端就支持换行显示）
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:24
     */
    private String content;

    /**
     * 回复图片消息/回复语音消息/回复视频消息/回复音乐消息
     * 通过素材管理中的接口上传多媒体文件，得到的id。
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:25
     */
    private String mediaId;

    /**
     * 回复视频消息/回复音乐消息/回复图文消息
     * 视频消息的标题/音乐标题/图文消息标题
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:26
     */
    private String title;

    /**
     * 回复视频消息/回复音乐消息/回复图文消息
     * 视频消息的描述/音乐描述/图文消息描述
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:26
     */
    private String description;

    /**
     * 回复音乐消息
     * 音乐链接
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:28
     */
    private String musicUrl;

    /**
     * 回复音乐消息
     * 高质量音乐链接，WIFI环境优先使用该链接播放音乐
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:28
     */
    private String hQMusicUrl;

    /**
     * 回复图文消息
     * 图片链接，支持JPG、PNG格式，较好的效果为大图360*200，小图200*200
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:29
     */
    private String picUrl;

    /**
     * 回复图文消息
     * 点击图文消息跳转链接
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:29
     */
    private String url;

    private JSONObject xmlJson;

    /**
     * 通用的Json对象
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:39
     */
    private JSONObject getJson() {
        JSONObject json = new JSONObject();
        json.put("ToUserName", getToUserName());
        json.put("FromUserName", getFromUserName());
        json.put("CreateTime", System.currentTimeMillis() / 1000);
        return json;
    }

    /**
     * 构建返回文本内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:31
     */
    public WeChatMpMsgResponse buildText() {
        xmlJson = getJson();
        xmlJson.put("MsgType", "text");
        xmlJson.put("Content", getContent());
        return this;
    }

    /**
     * 构建返回图片内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:46
     */
    public WeChatMpMsgResponse buildPic() {
        xmlJson = getJson();

        JSONObject subJson = new JSONObject();
        subJson.put("MediaId", getMediaId());

        xmlJson.put("MsgType", "image");
        xmlJson.put("Image", subJson);
        return this;
    }

    /**
     * 构建返回语音内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:46
     */
    public WeChatMpMsgResponse buildVoice() {
        xmlJson = getJson();
        JSONObject subJson = new JSONObject();
        subJson.put("MediaId", getMediaId());

        xmlJson.put("MsgType", "voice");
        xmlJson.put("Voice", subJson);
        return this;
    }

    /**
     * 构建返回视频内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:46
     */
    public WeChatMpMsgResponse buildVideo() {
        xmlJson = getJson();
        JSONObject subJson = new JSONObject();
        subJson.put("MediaId", getMediaId());
        subJson.put("Title", getTitle());
        subJson.put("Description", getDescription());

        xmlJson.put("MsgType", "video");
        xmlJson.put("Video", subJson);
        return this;
    }

    /**
     * 构建返回音乐内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:46
     */
    public WeChatMpMsgResponse buildMusic() {
        xmlJson = getJson();
        JSONObject subJson = new JSONObject();
        subJson.put("ThumbMediaId", getMediaId());
        subJson.put("Title", getTitle());
        subJson.put("Description", getDescription());
        subJson.put("MusicUrl", getMusicUrl());
        subJson.put("HQMusicUrl", gethQMusicUrl());

        xmlJson.put("MsgType", "music");
        xmlJson.put("Music", subJson);
        return this;
    }

    /**
     * 构建返回图文内容消息
     *
     * @author 长沙商脉科技有限公司
     * @date 2021/1/7 23:46
     */
    public WeChatMpMsgResponse buildNews(List<WeChatMpMaterial> newsMedia) {
        xmlJson = getJson();

        JSONArray array=new JSONArray();
        for (WeChatMpMaterial material : newsMedia) {
            JSONObject itemJson = new JSONObject();
            itemJson.put("Title", material.getTitle());
            itemJson.put("Description", material.getDigest());
            itemJson.put("PicUrl", material.getCover());
            itemJson.put("Url", material.getLink());

            array.add(itemJson);
        }

        JSONObject items = new JSONObject();
        items.put("item", array);

        xmlJson.put("Articles", items);
        xmlJson.put("MsgType", "news");
        xmlJson.put("ArticleCount", newsMedia.size());
        return this;
    }

    public String build() {
        JSONObject json=new JSONObject();
        json.put("xml",xmlJson);
        return JaxbUtil.jsonToXml(json);
    }

    public String getToUserName() {
        return toUserName;
    }

    public void setToUserName(String toUserName) {
        this.toUserName = toUserName;
    }

    public String getFromUserName() {
        return fromUserName;
    }

    public void setFromUserName(String fromUserName) {
        this.fromUserName = fromUserName;
    }

    public long getCreateTime() {
        return createTime;
    }

    public void setCreateTime(long createTime) {
        this.createTime = createTime;
    }

    public String getMsgType() {
        return msgType;
    }

    public void setMsgType(String msgType) {
        this.msgType = msgType;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getMediaId() {
        return mediaId;
    }

    public void setMediaId(String mediaId) {
        this.mediaId = mediaId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getMusicUrl() {
        return musicUrl;
    }

    public void setMusicUrl(String musicUrl) {
        this.musicUrl = musicUrl;
    }

    public String gethQMusicUrl() {
        return hQMusicUrl;
    }

    public void sethQMusicUrl(String hQMusicUrl) {
        this.hQMusicUrl = hQMusicUrl;
    }

    public String getPicUrl() {
        return picUrl;
    }

    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
